草庐IT

java - 队列的同步

全部标签

go - 同步/原子 StoreInt32 奇怪的行为

此代码已简化并描述了我的问题。atomic.StoreInt32似乎不起作用,但我不确定为什么。packagemainimport("fmt""sync/atomic")typeslavestruct{failedint32}funcNewSlave()slave{returnslave{0}}func(workerslave)Fail(){atomic.StoreInt32(&worker.failed,1)//Here'stheproblem.}func(workerslave)IsFailed()bool{failed:=atomic.LoadInt32(&worker.fail

java - 如何使用 JNA 为具有多个返回值的 go 函数编写接口(interface)

我正在尝试导出一些Go函数并在Java中调用它们,使用JNA,但我不知道如何在Java中为具有多个返回值的Go函数定义接口(interface)。假设Go函数是://exportgenerateKeysfuncgenerateKeys()(privateKey,publicKey[]byte){return.....}返回值有两项,但在Java中,只允许有一项返回值。我能做什么? 最佳答案 cgo为多个返回值创建专用的C结构,并将各个返回值作为结构元素。在您的示例中,cgo将生成/*ReturntypeforgenerateKeys

google-app-engine - 如何在本地谷歌应用引擎环境中创建拉/推队列

我需要在本地启动我的谷歌应用引擎项目。它在谷歌服务器上正常工作,但调试变得很痛苦,因为在每个修复上部署都需要很多时间。我几乎已经设法在本地启动它,但我不明白如何创建队列,这是必要的。我的步骤:运行dev_appserver.pyapp.yaml,遵循usinglocaldevelopmentserver指导。除队列外一切正常:_,err:=taskqueue.Add(u.Ctx(),task,queueName)exceptions.ThrowIfErr(true,"err_msg",err)throwPanic!UserMessage:,Error:APIerror1(taskque

Golang 同步协程

我正在开发用于并发配置网络设备的SSH客户端应用程序,但在实现并发性时遇到了问题。我的程序接受一部分主机和一部分配置命令以发送到每个主机。我正在使用sync.WaitGroup来等待所有主机完成配置。这适用于小批量主机,但很快我的配置goroutines中的功能开始随机失败。如果我在失败的主机上重新运行程序,一些会成功,一些会再次失败。我必须重复这个过程,直到只剩下有实际错误的主机。它总是在身份验证失败时说authenticationfailed:authmethodstried[nonepassword]...或者sysDescr的值没有添加到某些设备字段。就好像当有许多主机和gor

go - 如何处理可以无阻塞增长的队列

如果队列可以从处理函数本身增长,我正在尝试了解如何在Go中处理队列。请参见下面的代码。在这个伪代码中,我想将我创建的处理程序数量限制为10。因此我创建了10个处理队列的处理程序。然后我用一个url开始排队。我的问题是,根据文档,channel的sender将阻塞,直到接收者接收到数据。在下面的代码中,每个进程都是一个处理新url的接收器。然而,很容易看出,如果一个进程向队列发送11个链接,它将阻塞,直到所有接收者都处理完这些新链接。如果这些接收者每个都有1个链接,那么它们也会在将新的1个链接发送到队列时阻塞。由于每个人都被阻止,所以什么都没有完成。我想知道go的一般解决方案是什么,用于

go - 如何避免在同步时调用 `updateFunc`?

据我了解(和经验)-kubernetes线人调用updateFunc其缓存的每个“同步”事件-据我所知,这是由于this烦人的代码和平。线人定义示例:informer:=NewInformer(&cache.ListWatch{ListFunc:func(optionsapi.ListOptions)(runtime.Object,error){returnkubeClient.Batch().Jobs(api.NamespaceAll).List(options)},WatchFunc:func(optionsapi.ListOptions)(watch.Interface,erro

azure - 从服务总线队列检索消息时出错

我尝试使用Go从Azure服务总线队列中提取消息,但在运行代码时出现错误。这是我的代码。funcExample_queue_receive(){ctx,cancel:=context.WithTimeout(context.Background(),10*time.Second)defercancel()connectionString:="Endpoint=sb://{my_service_name}.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey={my_sh

google-app-engine - App Engine 任务队列创建一批队列项并在 go lang 中每 10 秒执行一次

由于使用内部代码的第三方API的某些限制(第三方API每分钟有1000个API调用),我想创建一批队列项并每10秒执行一次。但我不知道如何使用任务队列在AppEngine中实现给定的要求。或者可以使用任务队列推送创建批处理吗? 最佳答案 TaskQueueTask有一个Delaytime.Duration以及ETAtime.Time字段,可用于创建和延迟任务.相信你可以重用thetopexample但在调用taskqueue.Add(c,t,"")之前设置其中一个字段 关于google-

java - 向 TCP 服务器指示 Java TCP 客户端已完成写入流

我正在编写一个连接到GolangTCP服务器的JavaTCP客户端。服务器使用以下代码从客户端读取消息:func(tcpHandlerTCPHandler)getClientMsgBytes(connection*net.TCPConn)([]byte,error){clientMsgBytes,err:=ioutil.ReadAll(connection)iferr!=nil{returnnil,err}returnclientMsgBytes,nil}我的客户端使用以下代码向服务器发送消息:try(Socketsocket=newSocket("localhost",9000)){

go - 基于异步回调的 API 的同步 API 包装器

我正在使用pion/webrtcGo库在我的项目中发现了这个问题,即库提供的基于回调的API(它反射(reflect)了WebRTC的JavaScriptAPI)在Go中使用起来很尴尬。例如,执行以下操作conn.OnTrack(func(...){...})conn.OnICEConnectionStateChange(func(...){...})在JavaScript中很典型,但在Go中,这有一些问题:如果并行调用回调,此API可以轻松引入数据竞争。基于回调的API传播到代码库的其他部分并使一切都接受回调。在Go中处理这种情况的常规方法是什么?我是Go的新手,我读到同步API在G